#pragma once

#pragma unmanaged

#include <BWTA.h>
#include <BWSAL\ScoutManager.h>

#pragma managed

#include "..\AiBase.h"
#include "Interfaces\IScoutManager.h"
#include "Interfaces\IUnitArbitrator.h"
#include "Interfaces\IInformationManager.h"

using namespace BroodWar;

namespace BroodWar
{
	namespace Addon
	{
		ref class InformationManager;

		public ref class ScoutManager : public AiBase, IScoutManager
		{
		internal:
			BWSAL::ScoutManager* instance;

			ScoutManager(BWSAL::ScoutManager* manager);
			~ScoutManager();
			!ScoutManager();

			static ScoutManager^ s_instance;
		public:
			static void Create(IUnitArbitrator^ arbitrator, IInformationManager^ informationManager);
			static property ScoutManager^ Instance { ScoutManager^ get(); }

			virtual void OnOffer(IEnumerable<Unit^>^ units);
			virtual void OnRevoke(Unit^ unit, double bid);
			virtual property String^ Name { String^ get(); }
			virtual void OnFrame() override;

			virtual void Initialize();

			virtual property bool IsScouting { bool get(); }
			virtual void SetScoutCount(int count);
			virtual void SetDebugMode(bool debugMode);
		};
	}
}
